package com.nbut.filesystem;

import java.io.*;

/**
 * 用户相关操作类
 */
public abstract class UserAction {
    /**
     * 创建用户文件
     * @param userAddr 用户文件根目录的绝对路径
     * @param user 用户对象
     * @throws IOException 文件写入失败时可能会抛出
     */
    public static void createUser(String userAddr,User user) throws IOException {
        //拼接用户文件绝对路径
        File userFile = new File(userAddr + user.getUsername()+".user");
        //利用序列化写入对象
        ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(userFile));
        outputStream.writeObject(user);
        outputStream.flush();
        outputStream.close();
    }

    /**
     * 读取用户文件
     * @param userAddr 用户文件根目录的绝对路径
     * @param username 用户名
     * @return 用户对象
     * @throws IOException 文件读取时失败时可能会抛出
     * @throws ClassNotFoundException 读入对象时，若程序中没有对应的类，则会抛出
     */
    public static User getUser(String userAddr,String username) throws IOException, ClassNotFoundException {
        //拼接用户文件绝对路径
        File userFile = new File(userAddr+ username+".user");
        //利用序列化读取对象
        ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(userFile));
        User user= (User)inputStream.readObject();
        inputStream.close();
        return user;
    }

    /**
     * 删除用户文件
     * @param userAddr 用户文件根目录的绝对路径
     * @param user 用户对象
     * @return 是否删除成功
     */
    public static boolean deleteUser(String userAddr,User user) {
        boolean flag = false;
        //拼接用户文件绝对路径
        File userFile = new File(userAddr+user.getUsername()+".user");
        // 路径为文件且不为空则进行删除
        if (userFile.isFile() && userFile.exists()) {
            flag = userFile.delete();
        }
        return flag;
    }
}
